package com.fsm.common.tools.util;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 身份证号解读工具类
 */
public class IdCardUtils {

    /**
     * 通过身份证号获取性别
     *
     * @param idCard 身份证号
     * @return
     */
    public static Integer getSex(String idCard) throws Exception {
        // 获取第17位字符
        char genderChar = idCard.charAt(16);
        if ((genderChar - '0') % 2 == 0) {
            //女
            return 0;
        } else {
            //男
            return 1;
        }
    }

    /**
     * 通过身份证号获取出生年月日
     *
     * @param idCard 身份证号
     * @return
     */
    public static String getBirthday(String idCard) throws Exception {
        String birthDate = idCard.substring(6, 14);
        return birthDate.substring(0, 4) + "年" + birthDate.substring(4, 6) + "月" + birthDate.substring(6) + "日";
    }

    /**
     * 通过身份证号获取年龄
     *
     * @param idCard 身份证号
     * @return
     */
    public static Integer getAge(String idCard) throws Exception {
        String birthDateStr = idCard.substring(6, 14);
        // 将字符串日期转换为Date对象
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); // 创建日期格式
        Date birthDate = null;
        try {
            birthDate = format.parse(birthDateStr); // 解析出生日期字符串
        } catch (Exception e) {
            e.printStackTrace(); // 捕获并打印异常
        }
        // 获取当前日期
        Date currentDate = new Date();
        // 计算年龄
        int age = currentDate.getYear() - birthDate.getYear(); // 计算年份差
        // 如果当前日期在生日之前，年龄减一
        if (currentDate.before(birthDate)) {
            age--;
        }
        return age;
    }

}
